"""
python中 万物皆对象
什么是对象?
具体的物体: 有属性,拥有行为

举例 :
人类:
        - 属性: 姓名 年龄 身高 体重 ....
        - 行为: 走路 说话 吃饭

c语言 面向过程
python java .. 面向对象


怎么过渡
    1. 一样的，列举出一个任务的具体实现步骤
    2. 试图分离这些实现步骤中的功能代码块
    3. 将这些功能代码块，划分到某一个对象中
    4. 根据这个对象以及对应的行为，抽象出对应的类

高内聚,低耦合


什么是类??
    多个对象具体特征的抽象

类 组成:
    名称
    属性
    方法

对象和类之间的关系:
    对象 方法,属性 抽象  ---> 类
    类  方法,属性 实例化 --->对象

首先看看面向对象的三大特征：

封装：找到变化并且把它封装起来，你就可以在不影响其它部分的情况下
    修改或扩展被封装的变化部分，
    这是所有设计模式的基础，就是封装变化，因此封装的作用，就解决了程序的可扩展性。

继承：子类继承父类，可以继承父类的方法及属性，
    实现了多态以及代码的重用，因此也解决了系统的重用性和扩展性，
    但是继承破坏了封装，因为他是对子类开放的，
    修改父类会导致所有子类的改变，因此继承一定程度上又破坏了系统的可扩展性，
    所以继承需要慎用，只有明确的IS-A关系才能使用，
    同时继承在在程序开发过程中重构得到的，而不是程序设计之初就使用继承，
    很多面向对象开发者滥用继承，结果造成后期的代码解决不了需求的变化了。
    因此优先使用组合，而不是继承，是面向对象开发中一个重要的经验。

多态：接口的多种不同的实现方式即为多态。
    接口是对行为的抽象，刚才在封装提到，找到变化部分并封装起来，
    但是封装起来后，怎么适应接下来的变化？
    这正是接口的作用，接口的主要目的是为不相关的类提供通用的处理服务,
    我们可以想象一下。
    比如鸟会飞，但是超人也会飞，通过飞这个接口，我们可以让鸟和超人，都实现这个接口，
    这就实现了系统的可维护性，可扩展性。

    因此面向对象能实现人们追求的系统可维护性，可扩展性，可重用性。面向对象是一种编程思想，起初，
    “面向对象”是专指在程序设计中采用封装、继承、多态等设计方法，但面向对象的思想已经涉及到软件开发的各个方面，
    比如现在细分为了面向对象的分析(OOA)，面向对象的设计(OOD)，面向对象的编程实现(OOP)

"""


# 定义类
# class Person:
#
#     pass
#
#
# aaa = Person()
# print(aaa)


"""
属性相关:
    属性和变量
        属性:属于某个对象的特性
                只能通过对象进行访问
        变量:可以改变的量值  全局变量
                            局部变量
                            ...
                            
        
        

"""

#
# class Person:
#     age = 10
# #
# #
# # bbb = Person()
# # cp = Person()
#
# # 通过类new一个对象,并且使用__init__方法给属性赋值
#
#
# # # print(wxl.age)
# # bbb.age = 18
# # cp.age = 100
# # print(bbb.age)
# # print(cp.age)
# # bbb.name = "qqq"
# # bbb.high = 170
# # print(bbb.name)
#
#
# # 增
# #     1.直接通过对象,动态添加
# #         对象.属性名 = 值
# #     2.通过类的初始化方法(构造方法)   __init__方法
# # class Car:
# #     def __init__(self):
# #         self.brand = "a"
# # a_car = Car()
# # print(a_car.brand)
#
# # 删
# #
# # del bbb.name
# # print(bbb.name)
# # 改
# #
#
# # 查
# #   直接访问
#
#
# # print(wxl.__dict__)
#
#
#
# Person.age = 12
# print(Person.age)




class Animal:
    __a = "ok"
    @classmethod
    def found__a(cls):
        print(cls.__a)

    def __try(self):
        print("这是私有方法")

    def a(self):
        self.__try()

# print(aaa)
Animal().a()


import threading




























